// 导入路由
import { Message } from 'element-ui'
import router from './router'
// 导入仓库
import store from './store'
import { removeToken } from './utils/auth'

// 声明白名单 不需要登录
const whiteList = ['/login', '/404']
// 注册导航守卫
router.beforeEach(async(to, from, next) => {
  const _token = store.getters.token
  // token判断
  if (_token) {
    // 用户信息的判断
    if (store.getters.isLogin && to.path === '/login') {
      // 有token 有用户信息 别去登录了 去首页
      return next('/')
    }
    // 去的不是登录页 用户信息存在
    if (store.getters.isLogin) {
      // 有token 有用户信息 放走
      return next()
    }
    // 用户信息不存在 token存在
    try {
      // 尝试获取一下
      await store.dispatch('user/getUserInfo')
      // 到这 说明 token 没有问题
      if (to.path === '/login') {
        // 去首页
        return next('/')
      }
      // 不是去登录页 正常放走
      return next()
    } catch (error) {
      // token存在 有问题
      // 使用 action 删掉所有要删掉的东西
      // removeToken()
      // store.commit('user/setToken', undefined)
      store.dispatch('user/logout')

      // 提示用户
      Message.error('请重新登录!')
      // 去登录
      if (to.path === '/login') {
        // 是登陆 直接去
        return next()
      }
      // 不是登录页 打回登录页
      // fullpath 可以获取 /xxx?key=value
      // path 只可以获取 /xxx
      return next('/login?redirect=' + to.fullPath)
    }

    // // 有 token 对还是错
    // if (to.path === '/login') {
    //   // 没必要 直接去 首页
    //   return next('/')
    // }
    // // 不是登录页
    // return next()
  }
  // 没有token 白名单
  // includes 存在 true 不存在 false
  if (whiteList.includes(to.path)) {
    return next()
  }
  // 不在白名单中 没有token
  next('/login')
})
